// 控制计时器
// 定义全局变量
var leftTime = 120; // 正方初始时间为120秒
var rightTime = 120; // 反方初始时间为120秒
var middleTime = 60; // 常规倒计时为60秒
let leftInterval; // 正方计时器的定时器
let rightInterval; // 反方计时器的定时器
let middleInterval; // 常规倒计时计时器

let currentDebater = 'left';


// 全局步骤 mapping 
var currentStep = 0;
var currentName = '开篇立论';
var currentTime = 120; // 默认值 120。任意值都可以 
let steps = [
  {
    'setp': 0,
    'name': '环节一: 开篇立论',
    'time': 180
  },
  {
    'setp': 1,
    'name': '环节二: 攻辩',
    'time': 60
  },
  {
    'setp': 2,
    'name': '环节三: 自由辩论',
    'time': 240
  },
  {
    'setp': 3,
    'name': '环节四: 总结陈词',
    'time': 180
  },
];


function changeStep() {
  // 切换步骤，重置时间计数器
  if (currentStep < steps.length - 1) {
    currentStep++; // 切换到下一个步骤
  } else {
    currentStep = 0; // 重新开始
  }
  stepName = steps[currentStep].name; // 更新当前步骤名称
  currentTime = steps[currentStep].time; // 更新当前步骤时间
  curStep = steps[currentStep].setp; // 当前步骤角标 
  resetLeftTimer();
  resetRightTimer();
  pauseLeftTimer();
  pauseRightTimer();

  leftTime = currentTime;
  rightTime = currentTime;

  console.log("更新步骤信息:");
  console.log("当前步骤：" + stepName);
  console.log("当前时间：" + currentTime);
  console.log("leftTime：" + leftTime);
  console.log("rightTime：" + rightTime);
  changeInnerInfo(leftTime, rightTime, stepName);

  // 如果为自由辩论环节，展示 
  if (curStep == 2) {
    showMiddleTimer(); // 显示中间倒计时
  } else {
    hideMiddleTimer(); // 隐藏中间倒计时
  }
}

function changeDebater() {
  if (currentDebater === 'left') {
    startRightTimer(); // 开始反方计时器
  } else if (currentDebater === 'right') {
    startLeftTimer(); // 开始正方计时器
  }
}

// 开始正方计时器
function startLeftTimer() {
  currentDebater = 'left';
  if (leftInterval) return; // 如果已经启动，则不重复启动
  pauseRightTimer(); // 暂停反方计时器
  pauseMiddleTimer(); // 暂停中间计时器
  resetMiddleTimer(); // 重置中间计时器

  startMiddleTimer(); // 开始中间计时器
  leftInterval = setInterval(() => {
    if (leftTime <= 0) {
      clearInterval(leftInterval); // 停止计时器
      leftInterval = null;
      playAudio('audio2.mp3'); // 当倒计时为0时播放 audio2.mp3
      document.getElementById('left-timer').textContent = '00:00'; // 设置显示时间为 00:00
    } else {
      leftTime--; // 减少1秒
      updateTimer('left', leftTime); // 更新显示时间
      if (leftTime > 12 && leftTime <= 15) playAudio('audio1.mp3'); // 当剩余时间大于12秒且小于等于15秒时播放 audio1.mp3
    }
  }, 1000); // 每隔1秒执行一次
}

// 暂停正方计时器
function pauseLeftTimer() {
  if (leftInterval) {
    clearInterval(leftInterval); // 停止计时器
    leftInterval = null;
  }

  pauseMiddleTimer(); // 暂停中间计时器
}

// 重置正方计时器
function resetLeftTimer() {
  pauseLeftTimer(); // 暂停正方计时器
  let originLeftTime = steps[currentStep].time;
  leftTime = originLeftTime;
  console.log("left timer reset", originLeftTime);
  updateTimer('left', originLeftTime); // 更新显示时间为120秒

  pauseMiddleTimer(); // 暂停中间计时器
  resetMiddleTimer(); // 重置中间计时器
}

// 开始反方计时器
function startRightTimer() {
  currentDebater = 'right';
  if (rightInterval) return; // 如果已经启动，则不重复启动
  pauseLeftTimer(); // 暂停正方计时器
  pauseMiddleTimer(); // 暂停中间计时器
  resetMiddleTimer(); // 重置中间计时器

  startMiddleTimer(); // 开始中间计时器
  rightInterval = setInterval(() => {
    if (rightTime <= 0) {
      clearInterval(rightInterval); // 停止计时器
      rightInterval = null;
      playAudio('audio2.mp3'); // 当倒计时为0时播放 audio2.mp3
      document.getElementById('right-timer').textContent = '00:00'; // 设置显示时间为 00:00
    } else {
      rightTime--; // 减少1秒
      updateTimer('right', rightTime); // 更新显示时间
      if (rightTime > 12 && rightTime <= 15) playAudio('audio1.mp3'); // 当剩余时间大于12秒且小于等于15秒时播放 audio1.mp3
    }
  }, 1000); // 每隔1秒执行一次
}

// 暂停反方计时器
function pauseRightTimer() {
  if (rightInterval) {
    clearInterval(rightInterval); // 停止计时器
    rightInterval = null;
  }

  pauseMiddleTimer(); // 暂停中间计时器
}

// 重置反方计时器
function resetRightTimer() {
  pauseRightTimer(); // 暂停反方计时器
  let originRightTime = steps[currentStep].time;
  rightTime = originRightTime;
  console.log("right timer reset", originRightTime);
  updateTimer('right', originRightTime);

  pauseMiddleTimer(); // 暂停中间计时器
  resetMiddleTimer(); // 重置中间计时器
}

// 任意一方开始发言，都会启动中间计时器，没人最多发言1min
function startMiddleTimer() {
  pauseMiddleTimer(); // 先清空，再继续
  middleInterval = setInterval(() => {
    if (middleTime <= 0) {
      clearInterval(middleInterval); // 停止计时器
      middleInterval = null;
      playAudio('audio2.mp3'); // 当倒计时为0时播放 audio2.mp3
      document.getElementById('middle-timer').textContent = '00:00';

      // 停止所有计时器(相当于发言终止了)
      pauseLeftTimer();
      pauseRightTimer();
    } else {
      middleTime--; // 减少1秒
      updateTimer('middle', middleTime); // 更新显示时间
      if (middleTime > 12 && middleTime <= 15) playAudio('audio1.mp3');
    }
  }, 1000); // 每隔1秒执行一次
}

// 暂停反方计时器
function pauseMiddleTimer() {
  if (middleInterval) {
    clearInterval(middleInterval); // 停止计时器
    middleInterval = null;
  }
}

// 重置反方计时器
function resetMiddleTimer() {
  middleTime = 60;
  console.log("middle timer reset", middleTime);
  updateTimer('middle', middleTime);
}

// 更新计时器显示时间
function updateTimer(side, time) {
  const minutes = Math.floor(time / 60); // 计算分钟数
  const seconds = time % 60; // 计算秒数
  const formattedTime = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; // 格式化时间
  document.getElementById(`${side}-timer`).textContent = formattedTime; // 更新显示时间
}

// 播放音频
function playAudio(src) {
  const audio = new Audio(src); // 创建音频对象
  audio.play(); // 播放音频
}

// 页面加载后，初始化一些变量 
document.addEventListener('DOMContentLoaded', function () {
  hideMiddleTimer(); // 中间的计时器只有在自由辩论环节展示 

  // 初始化全局变量  
  currentStep = 0;
  currentStepInfo = steps[currentStep];
  stepName = currentStepInfo['name'];
  stepTime = currentStepInfo['time'];

  currentTime = stepTime;
  leftTime = currentTime;
  rightTime = currentTime;

  console.log("DOM 已加载，全局变量已初始化");
  console.log("当前步骤：" + stepName);
  console.log("当前时间：" + currentTime);
  console.log("leftTime：" + leftTime);
  console.log("rightTime：" + rightTime);
  changeInnerInfo(leftTime, rightTime, stepName);
});

function changeInnerInfo(leftTime, rightTime, stepName) {
  var timerElement = document.getElementById("left-timer");
  if (timerElement) {
    let minutesTime = leftTime / 60;
    timerElement.innerText = `0${minutesTime}:00`;
  }

  var timerElement = document.getElementById("right-timer");
  if (timerElement) {
    let minutesTime = rightTime / 60;
    timerElement.innerText = `0${minutesTime}:00`;
  }

  var stepNameElement = document.getElementById("step-name");
  if (stepNameElement) {
    stepNameElement.innerText = stepName;
  }
}

function hideMiddleTimer() {
  document.getElementById('middle-timer').style.display = 'none';
}

function showMiddleTimer() {
  document.getElementById('middle-timer').style.display = 'block';
}